/*******************************************************************************
 * KindEditor - WYSIWYG HTML Editor for Internet
 * Copyright (C) 2006-2011 kindsoft.net
 *
 * @author Roddy <luolonghao@gmail.com>
 * @site http://www.kindsoft.net/
 * @licence http://www.kindsoft.net/license.php
 *******************************************************************************/

// Google Maps: http://code.google.com/apis/maps/index.html

KindEditor.plugin("map", function(K) {
  var self = this,
    name = "map",
    lang = self.lang(name + ".");
  self.clickToolbar(name, function() {
    var html = [
      '<div style="padding:10px 20px;">',
      '<div class="ke-dialog-row">',
      lang.address +
        ' <input id="kindeditor_plugin_map_address" name="address" class="ke-input-text" value="" style="width:200px;" /> ',
      '<span class="ke-button-common ke-button-outer">',
      '<input type="button" name="searchBtn" class="ke-button-common ke-button" value="' +
        lang.search +
        '" />',
      "</span>",
      "</div>",
      '<div class="ke-map" style="width:558px;height:360px;"></div>',
      "</div>"
    ].join("");
    var dialog = self.createDialog({
      name: name,
      width: 600,
      title: self.lang(name),
      body: html,
      yesBtn: {
        name: self.lang("yes"),
        click: function(e) {
          var geocoder = win.geocoder,
            map = win.map,
            center = map.getCenter().lat() + "," + map.getCenter().lng(),
            zoom = map.getZoom(),
            maptype = map.getMapTypeId(),
            url = "http://maps.googleapis.com/maps/api/staticmap";
          url += "?center=" + encodeURIComponent(center);
          url += "&zoom=" + encodeURIComponent(zoom);
          url += "&size=558x360";
          url += "&maptype=" + encodeURIComponent(maptype);
          url += "&markers=" + encodeURIComponent(center);
          url += "&language=" + self.langType;
          url += "&sensor=false";
          self
            .exec("insertimage", url)
            .hideDialog()
            .focus();
        }
      },
      beforeRemove: function() {
        searchBtn.remove();
        if (doc) {
          doc.write("");
        }
        iframe.remove();
      }
    });
    var div = dialog.div,
      addressBox = K('[name="address"]', div),
      searchBtn = K('[name="searchBtn"]', div),
      win,
      doc;
    var iframeHtml = [
      "<!doctype html><html><head>",
      '<meta name="viewport" content="initial-scale=1.0, user-scalable=no" />',
      "<style>",
      "	html { height: 100% }",
      "	body { height: 100%; margin: 0; padding: 0; background-color: #FFF }",
      "	#map_canvas { height: 100% }",
      "</style>",
      '<script src="http://maps.googleapis.com/maps/api/js?sensor=false&language=' +
        self.langType +
        '"></script>',
      "<script>",
      "var map, geocoder;",
      "function initialize() {",
      "	var latlng = new google.maps.LatLng(31.230393, 121.473704);",
      "	var options = {",
      "		zoom: 11,",
      "		center: latlng,",
      "		disableDefaultUI: true,",
      "		panControl: true,",
      "		zoomControl: true,",
      "		mapTypeControl: true,",
      "		scaleControl: true,",
      "		streetViewControl: false,",
      "		overviewMapControl: true,",
      "		mapTypeId: google.maps.MapTypeId.ROADMAP",
      "	};",
      '	map = new google.maps.Map(document.getElementById("map_canvas"), options);',
      "	geocoder = new google.maps.Geocoder();",
      "	geocoder.geocode({latLng: latlng}, function(results, status) {",
      "		if (status == google.maps.GeocoderStatus.OK) {",
      "			if (results[3]) {",
      '				parent.document.getElementById("kindeditor_plugin_map_address").value = results[3].formatted_address;',
      "			}",
      "		}",
      "	});",
      "}",
      "function search(address) {",
      "	if (!map) return;",
      "	geocoder.geocode({address : address}, function(results, status) {",
      "		if (status == google.maps.GeocoderStatus.OK) {",
      "			map.setZoom(11);",
      "			map.setCenter(results[0].geometry.location);",
      "			var marker = new google.maps.Marker({",
      "				map: map,",
      "				position: results[0].geometry.location",
      "			});",
      "		} else {",
      '			alert("Invalid address: " + address);',
      "		}",
      "	});",
      "}",
      "</script>",
      "</head>",
      '<body onload="initialize();">',
      '<div id="map_canvas" style="width:100%; height:100%"></div>',
      "</body></html>"
    ].join("\n");
    // TODO：用doc.write(iframeHtml)方式加载时，在IE6上第一次加载报错，暂时使用src方式
    var iframe = K(
      '<iframe class="ke-textarea" frameborder="0" src="' +
        self.pluginsPath +
        'map/map.html" style="width:558px;height:360px;"></iframe>'
    );
    function ready() {
      win = iframe[0].contentWindow;
      doc = K.iframeDoc(iframe);
      //doc.open();
      //doc.write(iframeHtml);
      //doc.close();
    }
    iframe.bind("load", function() {
      iframe.unbind("load");
      if (K.IE) {
        ready();
      } else {
        setTimeout(ready, 0);
      }
    });
    K(".ke-map", div).replaceWith(iframe);
    // search map
    searchBtn.click(function() {
      win.search(addressBox.val());
    });
  });
});
